<?php

/**
 * 日志处理类 
 */
class Log
{
    // 单例模式
    private static $instance = NULL;
    
    // 文件句柄
    private static $handle = NULL;
    
    // 日志开关
    private $log_switch = false;
    
    // 日志相对目录
    private $log_file_path = NULL;
    
    // 日志文件最大长度，超出长度重新建立文件
    private $log_max_len = 2048000; // 日志文件一个最大1M

    // 日志文件前缀,入 log_0
    private $log_file_pre = 'archive_';
    
    // 日志记录id
    private $log_id = 0;

    /**
     * 构造函数
     * 注意：以下是配置文件中的常量，请读者自行更改
     */
    protected function __construct ()
    {
        $this->log_file_path = WEB_LOG_PATH;
        
        $this->log_switch = TRUE;
        
        $this->log_max_len = 2048000;
        
        $this->log_id = mt_rand(10000, 99999);
    }

    /**
     * 单例模式
     */
    public static function get_instance ()
    {
        if (! self::$instance instanceof self) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    /**
     * 日志记录
     *
     * @param int $type
     *            0 -> 记录(THING LOG) / 1 -> 错误(ERROR LOG)
     * @param string $desc
     * @param string $time
     */
    public function log ($desc, $type, $file_pre = '')
    {
        if ($this->log_switch) {
            if (! empty($file_pre)) {
                $this->log_file_pre = $file_pre;
            }
            
            $filename = $this->log_file_pre . date("Y-m-d") . ".log";
            if (self::$handle == NULL) {
                self::$handle = fopen($this->log_file_path . $filename, 'a+');
            } else {
                if (! file_exists($this->log_file_path . $filename)) {
                    self::$handle = fopen($this->log_file_path . $filename, 'a+');
                }
            }
            
            if (is_array($desc)) {
                $desc = 'desc array : ' . print_r($desc, TRUE);
            }
            
            switch ($type) {
                case 0:
                    fwrite(self::$handle, " log_id : " . $this->log_id . " " . date("Y-m-d H:i:s") . ' : MSG LOG:' . ' ' . $desc . PHP_EOL);
                    break;
                case 1:
                    fwrite(self::$handle, " log_id : " . $this->log_id . " " . date("Y-m-d H:i:s") . ' : ERROR LOG:' . ' ' . $desc . PHP_EOL);
                    break;
                default:
                    fwrite(self::$handle, " log_id : " . $this->log_id . " " . date("Y-m-d H:i:s") . ' : MSG LOG:' . ' ' . $desc . PHP_EOL);
                    break;
            }
        }
    }

    /**
     * 关闭文件句柄
     */
    public function close ()
    {
        fclose(self::$handle);
    }
}
?>
